package org.bigjava.novelplatform.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.bigjava.novelplatform.common.enums.IsEndImprison;
import org.bigjava.novelplatform.common.enums.UserRole;
import org.bigjava.novelplatform.common.verifyGroup.Register;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.URL;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * 用户信息
 * @author YKH
 * @TableName users
 */
@TableName(value ="users")
@Data
public class Users implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;

    /**
     * 昵称,限制为30字符
     */
    @Length(max = 30)
    @NotEmpty(message = "昵称不能为空",groups = {Register.class})
    private String nickName;

    /**
     * 加密密码
     */
    @NotEmpty
    @Length(min = 6,message = "密码必须要为6位以上",groups = {Register.class})
    private String password;

    /**
     * 验证邮箱
     */
    @Email(groups = {Register.class})
    private String email;

    /**
     * 扩展id
     用户可能拥有其他扩展字段,<br />需要存放在其他表中.
     */
    private Integer extensionId;

    /**
     * 验证码
     * 格式为：
     * 前缀_code_时间，用户只需要填写code，其他两部分用于内部校验
     */
    @NotEmpty(groups = {Register.class})
    private String authCode;

    /**
     * 经验
     判断用户是否为老用户
     */
    private Long experience;

    /**
     * 关注数
     */
    private Integer attentionCount;

    /**
     * 粉丝数
     */
    private Integer fansCount;

    /**
     * 用户类型
     0普通用户；1admin；2editor；3writer
     管理员；编辑；作者
     */
    private UserRole userType;

    /**
     * 注册时间，自动
     */
    private Date registerTime;

    /**
     * 最后登录时间
     */
    private Date lastLoginTime;

    /**
     * 头像路径
     */
    @URL
    private String headPortraitUrl;

    /**
     * 加密相关
     */

    private String secretKey;

    /**
     * 累计代币
     总计充值，达到阈值自动成为会员
     */
    private BigDecimal tokenCount;

    /**
     * 代币余额
     */
    private BigDecimal tokensBalance;

    /**
     * 消费积分
     */
    private Integer integral;

    /**
     * 禁言
     0正常；1禁言
     */
    private IsEndImprison imprison;

    /**
     * 禁言结束时间
     */
    private Date imprisonClosedTime;

    /**
     * 逻辑删除
     0未删除；1删除
     */
    private Integer deleteState;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;

}